package cn.lcsjsxy.yxc.objectoriented.final修饰类和方法;

/*
 * final：最终的
 * 1.final 可以用来修饰的结构：类、方法、变量
 *
 * 2.final 用来修饰一个类:此类不能被其他类所继承
 *
 *   比如：String类、System类、StringBuffer类
 *
 * 3.final 用来修饰方法：表明此方法不可以被重写
 *                比如：Object类中getClass（）;
 * 4.final 用来修饰变量：此时的“变量”就称为是一个常量
 *       4.1 final修饰属性：可以考虑的位置有：显式初始化、代码块中初始化、构造器中初始化
 *       4.2 final修饰局部变量：
 *              尤其是使用final修饰形参时，表明此形参是一个常量。当我们调用此方法时，给常量形参赋一个实参。一旦赋值以后，就只能在方法体内使用此形参，但不能进行重新赋值。
 * static final 用来修饰属性：全局常量
 * */
public class FinalTest {

    public static void main(String[] args) {
        int num = 10;
        num = num + 5;
        FinalTest finalTest=new FinalTest();
        finalTest.doWidth(10);
    }

    final int width = 10;
    final int in1;
    final int in2;

    {
        in1 = 20;
    }

    public FinalTest() {
        in2 = 100;
        final int in3=20;
//        in3=30;  无法将值赋给 final 变量 'in3'
    }

    final public void a() {

    }

    public void doWidth() {
//        width=20;  无法将值赋给 final 变量 'width'
    }

    public void doWidth(final int num){
        //num=20;  作为形参时候，不能在方法体内赋值
    }
}

final class FinalA extends FinalTest {
//    public void com.yang_xc.a(){  //'com.yang_xc.a()' 无法重写 'com.yang_xc.objectoriented.final修饰类和方法. FinalTest' 中的 'com.yang_xc.a()'；重写的方法为 final
//
//    }
}

//class FinalB extends FinalA{
//
//}

//class C extends String{
//
//}